iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0

標題寫的很清楚啦,
今天就寫一個 hello world 的 playbook,
作為部署我們應用程式的暖身

  1. adhoc 寫一個 Python FastAPI 範例 + Dockerfile
  2. 用 Ansible 遠端部署 <- 現在在這裡
  3. 用 Ansible AWX 自動部署

當初剛學的時候,
糾結 Ansible 的 directory 架構長怎樣,
糾結非常久,
糾結的點是那些參數 a.k.a vars,
到底是怎麼在 playbook 間傳遞的?
沒有顯式的寫 import,
到底是怎麼引用的?
非常困擾…
老是覺得網路上教學都沒有把這種最簡單的事情交待一下 T^T

後來我參考官網的 layout終於學會了,
總之看到這篇的你,
如果也糾結 playbook 不知道該怎麼組織才是最優解,
先照著做就對了

.
├── ansible.cfg
├── inventory
├── main.yml
└── roles
    └── hello_world
        ├── tasks
        │   └── main.yml
        └── vars
            └── main.yml

稍微解釋一下,
ansible.cfg 就是寫關於這包 ansible 的 config,
長得像這樣

[defaults]
inventory = ./inventory
roles_path = ./roles
host_key_checking = False

host_key_checking 應該要開 True
但為了防呆,
萬一卡在有些機器沒有先 ssh 過,
接受 remote host key,
這樣 playbook 就會卡住,
正常來說,
比較妥當的方法還是全部機器手動用 ssh retrieve 過一遍

再來是 inventory
這邊要記得 ansible_ prefix 的這些變數,
要 align 你 ~/.ssh/config 的設定,
你的 inventory 有兩種寫法 yaml 或是 ini,
先示範 yaml 格式

all:
  hosts:
    staging:
      ansible_host: ubuntu-staging-env
      ansible_user: ubuntu
      ansible_ssh_private_key_file: ~/.ssh/my_private_key

要切記: 後面是有一個半形空格的,可以用一些 linting 的 tool 來檢查

再來示範 ini 格式

[all]
staging ansible_host=ubuntu-staging-env ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/my_private_key

不知道你各位喜歡哪一種,
我一開始是 ini 派,後來變成 yaml 派,
也沒什麼特別原因,
可能 yaml 用習慣了,排版比較舒服,
對照一下我們的 ~/.ssh/config 應該長怎樣

Host ubuntu-staging-env
        Hostname xx.xx.xx.xx
        User ubuntu
        IdentityFile ~/.ssh/my_private_key

最後我們測試一下 ssh 和 inventory 這些是否正常

ansible -m ping all

img

今天先這樣,結果又沒來得及寫完預期進度 orz...


上一篇
手動部署 Python FastAPI demo app in Docker
下一篇
Ansible playbook hello world
系列文
我只是想自動執行 Ansible ,一定要用 Jenkins 嗎30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言